var $table;
var index;
(function($){
    $.extend({
        tableTree:{
            refresh:function(){
                $table.bootstrapTable('refresh');
            },
            // 表格树的相关配置的json对象
          init:function(tableId,options){

              $table = $("#"+tableId+"");
              $table.bootstrapTable({
                  height:400, //表的高度
                  method:'get',  //请求远程数据的方法类型
                  contentType:'application/x-www-form-urlencoded',//默认是content/json
                  undefinedText:'无数据',  //定义默认undefined 文本
                  showColumns: true, //设置true 为显示列下拉列表（右上角那个）  默认false
                  showColumnsToggleAll:true,//为在列选项/下拉列表中显示“切换所有”复选框。
                  showColumnsSearch:true,//显示搜索
                  showToggle: true,
                  idField:options.idField==undefined?'id':options.idField,//指定那个字段作为复选框，与selectItemName对应。
                  uniqueId:options.uniqueId==undefined?'id':options.uniqueId,//提高页面渲染的效率
                  showRefresh: true, //设置true为显示刷新按钮。
                  toolbar: '#toolbar', //工具栏
                  url:options.url,
                  columns:options.columns,
                  queryParams:function(params){  //请求远程数据时，可以通过修改queryParams发送其他参数。

                      let formParam=$('#form1').serializeArray();
                      for(let i=0;i<formParam.length;i++){
                          params[formParam[i].name]=formParam[i].value;
                      }
                      return params;  //发送url的时候可以为url传递参数
                  },
                  responseHandler:function (resp,jqXHR) {  //在加载远程数据之前，处理响应数据格式，当url得到参数不是json数组的时候进行修改
                      //对结果进行格式化
                      if(resp.code==200){
                          //注意一定要写total这个 否则找不到
                          //官网规定必须要 设置rows 传入json的数组 和total  传入总条数
                          //这俩可以通过 rows  对应dataField  默认rows
                          // total 对应 totalField:'total' 默认total  进行修改
                          return  {"rows": resp.result} ;
                      }
                  },
                  treeShowField: options.treeShowField,
                  parentIdField: options.parentIdField,
                  rootParentId:options.rootParentId,
                  onPostBody: function() {
                      var columns = $('#table').bootstrapTable('getOptions').columns
                      // 第1行的第2列不是隐藏
                      if (columns && columns[0][1].visible) {
                          $('#table').treegrid({
                              treeColumn: 1,
                              onChange: function() {
                                  $('#table').bootstrapTable('resetView')
                              }
                          })
                      }
                  }
              })
          }
        },
        table:{
            idField:'id',
            init:function(tableId,columns,url,uniqueId,method,idField){
                $table=$('#'+tableId+'');
                if(idField!=undefined){
                    $.table.idField = idField;
                }
                $table.bootstrapTable({
                    undefinedText:'undefined', // undefined默认显示值
                    method:method==undefined?'get':method, // 请求方法类型
                    contentType:'application/x-www-form-urlencoded',// 表格数据请求采用get请求按照普通表单提交的enctype进行请求
                    // sortName:'id',
                    showPaginationSwitch:true, // 分页开关
                    showColumns:true,
                    showColumnsSearch:true,
                    showToggle:true,
                    showRefresh:true,
                    showFullscreen:true,
                    pagination:true,// 显示分页工具栏
                    toolbar:'#toolbar',
                    sidePagination:'server',
                    pageNumber:1,
                    pageSize:10,
                    showHeader:true,
                    showFooter:true,
                    pageList:[10,15,20,25],
                    uniqueId:uniqueId==undefined?'id':uniqueId,
                    clickToSelect:true,
                    columns: columns,
                    dataField:'rows1',
                    url:url,
                    // url发送前的请求参数的封装
                    queryParams:function(param){
                        param.pageNumber=2;
                        let pageNumber = param.offset/param.limit+1;
                        param.pageNumber=pageNumber;
                        param.pageSize = param.limit;
                        // js 对象
                        // user.userName ='admin'
                        // user[userName]='admin'
                        let formParam = $($("form")[0]).serializeArray();
                        console.info(formParam)

                        formParam.forEach(function(obj){
                            // console.info(this)
                            param[obj.name]=obj.value;
                        })
                        console.info("......"+JSON.stringify(param))
                        return param;
                    },
                    responseHandler:function(resp,jqxhr){
                        // 对结果进行格式化
                        if(resp.code==200){
                            console.info({"rows":resp.result.list,"totalRows":resp.result.total})
                            return {"rows1":resp.result.list,"total":resp.result.total};
                        }
                    }
                })
            },
            refresh:function(){
                $table.bootstrapTable('refresh');
            },
            getSelections:function(){
                return $table.bootstrapTable('getSelections');
            }

        },
        operator:{
            // 单个删除
            delete:function(url,callback){
                var index = layer.confirm('是否确定删除',function(){
                    $.ajax({
                        url:url,
                        type:'delete',
                        dataType:'json',
                        success:function(ret){
                            if(callback==undefined){
                                if(ret.code==200){
                                    $.successMsg(ret.msg);
                                }
                            }else{
                                callback(ret);
                            }
                            $.table.refresh();
                            layer.close(index);
                        }
                    })
                })

            },
            deletes:function(url,callback){
                let selectData = $.table.getSelections();
                console.info(selectData)
                // 选中的id
                let ids_ = new Array();
                selectData.forEach(function(data){
                    ids_.push(data[$.table.idField]);
                })
                console.info(ids_)
                if(selectData.length==0){
                    layer.msg('请选择要删除的数据');
                    return ;
                }
                layer.confirm('确定是否删除选中的'+selectData.length+'条数据?',function(){
                    $.ajax({
                        url:url,
                        type:'post',
                        dataType:'json',
                        param: {"ids":ids_},
                        success:function(ret){
                            if(callback==undefined){
                                if(ret.code==200){
                                    $.modal.successMsg(ret.msg);
                                }
                            }else{
                                callback(ret);
                            }
                        }
                    })
                })
            },
            addOrEdit:function(url,title,width,height){
                // 显示新增或编辑页面
                // 采用layer.open
                width=width==undefined?'991px':width;
                height=height==undefined?'500px':height;
                index = layer.open({
                    type:2,
                    content:url,
                    title:title,
                    area:[width,height],
                    closeBtn:1,
                    anim:2,
                    maxmin:true,
                    fixed:true
                });
            },

            save:function(url,params,callback){
                $.ajax({
                    url:url,
                    type:'post',
                    dataType:'json',
                    data:params,
                    success:function(ret){
                        if(callback==undefined){
                            if(ret.code==200){
                                $.modal.successMsgClose(ret.msg,function(){
                                    // 关闭弹出层 子页面调用父页面的方法
                                    parent.close();
                                    // 刷新列表
                                    parent.refresh();
                                });
                            }
                        }else{
                            callback(ret);
                        }

                    }
                })
            }
        },
        modal:{
            openWindowFull:function(url,title,width,height){
                // 显示新增或编辑页面
                // 采用layer.open
                width=width==undefined?'991px':width;
                height=height==undefined?'500px':height;
                index = layer.open({
                    type:2,
                    content:url,
                    title:title,
                    area:[width,height],
                    closeBtn:1,
                    anim:2,
                    maxmin:true,
                    fixed:true
                });
                layer.full(index)
            },
            openWindow:function(url,title,width,height){
                // 显示新增或编辑页面
                // 采用layer.open
                width=width==undefined?'991px':width;
                height=height==undefined?'500px':height;
                index = layer.open({
                    type:2,
                    content:url,
                    title:title,
                    area:[width,height],
                    closeBtn:1,
                    anim:2,
                    maxmin:true,
                    fixed:true
                });
            },
            msg:function(msg){
                layer.msg(msg, {
                    offset: 't',
                    anim: 6
                });
            },
            successMsg:function(msg){
                layer.msg(msg, {
                    offset: 't',
                    anim: 6
                });
            },
            successMsgClose:function(msg,callback){
                layer.msg(msg, {
                    offset: 't',
                    anim: 6
                },callback);
            }
        }

    })

})(jQuery)
